'use strict'

const http = require('http')


/**
 * 
 * .jpg .jpeg  -> image/jpeg
 * 
 * .png  -> image/png
 * 
 * .gif  -> image/gif
 * 
 * .ico  -> image/x-icon
 * 
 * .txt  -> text/plain
 * 
 * .json  -> text/json 或 application/json
 * 
 * .xml  -> text/xml 或 application/xml
 * 
 */

let html = `
    <!DOCTYPE html>
    <html>
        <head>
            <title>First HTTP</title>
        </head>
        <body>
            雷猴啊。
        </body>
    </html>
`

let routerTable = {

    '/' : async (request, response) => {
        response.setHeader('content-type',
                'text/html; charset=utf-8')

            response.end(html)
    },
    
    '/test':async(request,response)=>{
        let status = parseInt(Math.random() * 200) +199
        response.statusCode = status
        response.end('test end')
    },

    '/data' : async (request,response) => {
        let bufferList = []
        let bufferLength = 0
        
        Request.on('data', chunk => {
            bufferLength += chunk.length
            bufferList.push(chunk)
        })

        let bodyData = null;
        request.on('end', ()=>{
            if(bufferList.length > 0){
                bodyData = buffer.concat(bufferList, bufferLength)
                bufferList = []
            }

            if(bodyData){
                response.end(bodyData)
            } else{
                response.end()
            }
        })
    }
}


http.createServer((request, response) => {
    if(!routerTable[request.url]) {
        response.statusCode = 404
        response.end('page not found')
        return
    }

    routerTable[request.url](request, response)

})
.listen(3456)